package cn.hp.util;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

import java.util.HashMap;

/**
 * @author ck
 * @date 2021-09-30 11：56
 * @description 短信发送的工具类
 */
public class SmsUtil {

    /**
     * @method 发送短信静态方法
     * @param phone 要接收短信的手机号 code 要发送给手机号的随机验证码
     * @return 无
     */
    public static boolean sendSms(String phone , String templateId , String code ){

        // 使用的是那个地方的服务器 账号、密码是多少
        DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI4G3S7UZyBiRVBu93bcCP", "WzDLLmoSEY4VWqrSqSAqnRTonYKNl5");
        // 短信发送客户端
        IAcsClient client = new DefaultAcsClient(profile);
        // 通用请求 设置的是 发送短信的相关信息
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        // 设置服务器地址
        request.setSysDomain("dysmsapi.aliyuncs.com");
        // 设置使用的是哪一年的版本号
        request.setSysVersion("2017-05-25");
        // 使用的是哪个方法
        request.setSysAction("SendSms");
        // 设置请求方法的参数
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", "hopu教育");
        request.putQueryParameter("TemplateCode", templateId);
        // 替换短信模板中的占位符  使用json格式
        request.putQueryParameter("TemplateParam", "{'code':'"+ code +"'}");
        try {
            // 使用短信客户端进行短信的发送
            CommonResponse response = client.getCommonResponse(request);
            // 获取响应结果 将响应结果转换成map类型 进行判断Code状态是否是OK
            // CommonResponse {"RequestId":"35903C02-F10B-53C1-9778-F919A7342DC8","Message":"OK","BizId":"511804234186403009^0","Code":"OK"}
            String data = response.getData();
            System.out.println(data);
            HashMap hashMap = JSON.parseObject(data, HashMap.class);
            Object o = hashMap.get("code");
            //  ==( 基本判断值 引用类型判断地址 ) equals(默认情况下就是 ==  在被重写的情况下会有新的意义 String比较的是内容  )
            if ("OK".equals(hashMap.get("Code").toString())){
                return true ;
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        //  发送失败的情况
        throw new RuntimeException();
    }
}
